package com.briup.day03;

/**
 * @author lining
 * @date 2024/1/10 11:40
 */
public class Test5 {
    //逻辑运算符 布尔值  布尔表达式
    public static void method(){
        System.out.println( true && false);
        System.out.println( (1 > 0) && (3 == 4));
        // &(且 全真为真)  |(或 有真为真)
        System.out.println( true & true);
        System.out.println(true & false);
        System.out.println(true | false); //true
        // &&(且 全真为真)    || (或 有真为真)
        System.out.println( true && true);
        System.out.println(true && false);
        System.out.println(true || false); //true
        //区别：

    }
    public static void method2(){
        // && 短路 且  || 短路或
        int a =1;
        int b =1;
        System.out.println(true  &&  a++ > 10 );
        // false
        System.out.println(false  && b++ >10 );
        System.out.println(a);//2
        System.out.println(b);//1

    }
    public static void method3(){
        // && 短路 且  || 短路或
        int a =1;
        int b =1;
        System.out.println(true  || a++ > 10 );
        // false
        System.out.println(false || b++ >10 );
        System.out.println(a);//1
        System.out.println(b);//2
        System.out.println( 1 != 2); //true
        System.out.println(!true); //false
        System.out.println(true ^ true); //false
        System.out.println(true ^ false);//true
        System.out.println(false ^ false);// false
    }
    public static void method4(){
        //位运算
        /*
            32位  00..... 0000 0011
                 0..... 0000 00110  =4+2=6
                 0..     000 1000 8  16
         */


        System.out.println(3 << 1);// 6
        System.out.println(2 << 3); // 4 8 16
        //右移动    00000.... 0000 001
        System.out.println(3 >> 1);//
        System.out.println(3 >>> 1); //不带
        /*
            -3  0011
            1000 0011 （原）
            1111 1100  （反）
            111111...11111111 1101  （补码）
            1111111...11111111 110  (补码)
                         1111 1110 (补码)
                         1111 1101  (反码)
                         1000 0010  （原码）
                         -2
             0111111...11111111 110  （补码）
         */
        System.out.println(-3 >> 1);//带 （负数）
        System.out.println(-3 >>> 1); //不带 （正数 0111111...11111111 110）
        byte a = -3;
        System.out.println(a >>> 1);//不带
        System.out.println(a << 1);
    }
    public static void method5(){
        // 补码形式 ： 位运算 位当前值  0/1
        /*
                0000 0001
                0000 0010
                ------------
                0000 0000 (补码)

                0000 0001
                0000 0010
                ------------
                0000 0011

                0000 0001
                0000 0010
                ------------
                0000 0011

                0....000 0001
                1....111 1110 (补) = -2()


         */
        System.out.println( 1 & 2); //0
        System.out.println(1 | 2); //3
        System.out.println(1 ^ 2);//3
        System.out.println(~1);// ???  -2
          /*
                111111....1111
                111111....1110
                --------------
                00000.... 0001(补码) = 1
           */
        System.out.println( -1 ^ -2);// 1




    }

    public static void main(String[] args) {
        method5(); //如果调用同一个类中静态方法 直接调用
        Integer.max(1,2);//其他类中调用静态方法
    }
}
